signature TRANSASST_STRUCTS = 
sig
  structure Frame : FRAME
  structure Env : ENV
end

signature TRANSASST =
sig
  include TRANSASST_STRUCTS

  (* translate src senv into assembly-level senv : (string * (int * etype) list) list *)
  val topSEnv : (int * Env.types) Env.struct_env
                -> (string * (int * Frame.Assem.etype) list) list

  (* translate src env into assembly-level env : (aptr * etype) list *)
  val topEnv :  int * ((bool * int * Env.types) Env.env) 
                -> (Frame.Assem.aptr * Frame.Assem.aptr * Frame.Assem.etype) list

  (* translate src assert into assembly-level assert : (assert * passert) option *)
  val top : Frame.Ir.mytype option 
            * Frame.Ir.exp option 
            * int 
            * ((bool * int * Env.types) Env.env) 
            * ((int * Env.types) Env.struct_env) 
            -> (Frame.Assem.assert * Frame.Assem.passert) option
end
